#ifndef OSGArrowTool_H
#define OSGArrowTool_H

#include <osg/Geode>
#include <osgGe/Vec3d>
#include <osg/LineWidth>
#include <osgText/Text>
#include <osg/MatrixTransform>
#include <osg/LightSource>
#include <osg/Image>
#include <osg/Geometry>
#include <osgGe/Vec3>
#include <osgGe/Vec4>
#include <osg/Billboard>

#include <osg/Projection>



//绘制箭头
/**
 * @brief createArrow  输入第一个点,第二个点, 箭头宽,高,生成一个箭头
 * @param s            第一个点
 * @param f            第二个点
 * @param width        箭头宽
 * @param height       箭头高
 * @param color        箭头颜色
 * @return
 */
osg::ref_ptr<osg::Node> createArrow(osg::Vec3d s, osg::Vec3d f, double width, double height, osg::Vec4 color);
osg::ref_ptr<osg::Geode> createErectArrow(osg::Vec2d f, osg::Vec2d s);
osg::ref_ptr<osg::Projection> createNormalArrow(osg::Vec2d f, osg::Vec2d s, osg::Vec4 color = osg::Vec4(0.0, 0.0, 1.0, 1.0));
osg::ref_ptr<osg::MatrixTransform> createDefArrow(osg::Vec2d f, osg::Vec2d s, bool bjust, osg::Vec4f color = osg::Vec4f(0.0, 0.0, 1.0, 1.0));

/**
 * @brief createArrowAnimation 输入箭头顶点,旋转角度,宽,高,颜色,平移位置,生成箭头
 * @param point                箭头顶点
 * @param angle                箭头旋转角度
 * @param h                    箭头高
 * @param l                    箭头宽
 * @param color                箭头颜色
 * @param trans                箭头平移的位置
 * @return
 */
osg::ref_ptr<osg::Geode> createNormalArrow(double angle, double h, double l, osg::Vec4 color);
osg::ref_ptr<osg::Geode> createArrowAnimation(osg::Vec2d point, double angle, double h, double l, osg::Vec4 color, osg::Vec2d trans = osg::Vec2d(0, 0));
osg::ref_ptr<osg::Geode> createErectArrowAnimation(osg::Vec2d point, double angle, double h, double l, osg::Vec4 color, osg::Vec2d trans = osg::Vec2d(0, 0));
osg::ref_ptr<osg::Billboard> createArrowBillboard(osg::Vec2d point, double angle, double h, double l, osg::Vec4 color);

/**
 * @brief createCommonArrow   输入一系列点,在每个点出生成箭头,箭头的间距,使用mvp算出来
 * @param mt                  根节点坐标,挂接箭头
 * @param div_point           一系列点,在点的位置出,生成箭头
 * @param color               颜色
 * @param mat                 模型视图矩阵
 * @param mvp                 模型视图投影矩阵
 */
void createCommonArrow(osg::ref_ptr<osg::MatrixTransform> mt, std::vector<osg::Vec3f>& div_point, osg::Vec4 color, osg::Matrix mat, osg::Matrix mvp);


#endif


